#ifndef TRANSFEREDDATA_H
#define TRANSFEREDDATA_H

/**
 * Une description d'un fichier envoyée au serveur par un client.
 */
typedef struct fileDescCli
{
    char name[256];
    uint32_t size;
    uint32_t descSize;
} FileDescCli;

/**
 * Une description d'un fichier envoyée au client par le serveur.
 */
typedef struct fileDescServ
{
    char name[256];
    char author[32];
    uint32_t size;
} FileDescServ;

/**
 * Une description de fichier envoyé par un client pour demander l'ip d'un autre client ou la description du fichier
 */
typedef struct fileRequest
{
    char name[256];
    char author[32];
} FileRequest;

/**
 * Une identification d'un client sur le serveur.
 */
typedef struct identification
{
    char username[32];
    char password[64];
    char dlPort[20];
} Identification;

/**
 * Une connection, est envoyé afin de pouvoir récupérer un fichier.
 */
typedef struct connection
{
    char ip[40];
    char port[20];
} Connection;

/**
 * Un message de communication standard contient un octet pour définir le type de message et un contenu fonction du type de message.
 * type :
 *  -'L' = demande de login, id est utilisé
 *  -'l' = demande de création d'un utilisateur, id est utilisé
 *  -'E' = Envoie de fichiers, nbFiles est utilisé
 *  -'A' = demande d'Actualisation de la liste des fichiers, rien n'est utilisé
 *  -'D' = demande de Description, file est utilisé
 *  -'C' = demande de Connection, file est utilisé
 *  -'Q' = demande de logout, rien n'est utilisé
 *  -'O' = OK, rien n'est utilisé
 *  -'I' = envoie d'une Ip pour une connection, connection est utilisé
 *  -'i' = echec lors de la recherche de l'ip d'un utilisateur, rien n'est utilisé
 */
typedef struct message
{
    char type;
    union
    {
        Identification id;
        FileRequest file;
        Connection connection;
        uint32_t nbFiles;
    } content;
} Message;

#endif // TRANSFEREDDATA_H
